package com.ctshk.rpc.system.service;


import com.ctshk.rpc.system.dto.SysMenuActionButtonDTO;
import com.ctshk.rpc.system.dto.SysMenuButtonDTO;
import com.ctshk.rpc.system.dto.SysMenuDTO;
import com.ctshk.rpc.system.req.SysMenuReq;

import java.util.List;

/**
 * <p>
 * 菜单表 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2020-12-23
 */
public interface ISysMenuService {

    /**
     * 新增功能菜单
     * @param sysMenuReq
     * @param userId
     * @return
     */
    int add(SysMenuReq sysMenuReq, long userId);

    /**
     * 删除功能菜单
     * @param menuId
     * @param userId
     * @return
     */
    int del(long menuId, long userId);

    /**
     * 编辑功能菜单
     * @param sysMenuReq
     * @param userId
     * @return
     */
    int update(SysMenuReq sysMenuReq, long userId);

    /**
     * 查询功能菜单
     * @param menuId
     * @param userId
     * @return
     */
    List<SysMenuDTO> query(Integer sysType, long menuId, long userId);

    /**
     * 查询所有功能菜单
     * @param sysType
     * @param userId
     * @return
     */
    List<SysMenuDTO> queryAll(Integer sysType, long userId);

    /**
     * 根据menuId查询功能按钮,过滤权限
     * @param menuId
     * @param userId
     * @return
     */
    List<SysMenuActionButtonDTO> queryActionButton(long menuId, long userId);

    /**
     * 根据menuId查询功能菜单子级菜单页面ids数组,过滤权限
     * @param menuId
     * @param userId
     * @return
     */
    List<Long> queryChildrenIds(long menuId, long userId);

    /**
     * 根据menuId查询功能子级按钮ids数组,过滤权限
     * @param menuId
     * @param userId
     * @return
     */
    List<Long> queryActionButtonIds(long menuId, long userId, boolean isAdmin);

    /**
     * 根据menuId查询功能子级按钮ids数组,过滤权限
     * @param userId
     * @return
     */
    List<SysMenuButtonDTO> queryActionButtonAllIds(long userId, boolean isAdmin, String parentIds);

    /**
     * 设置功能菜单是否有效
     * 根据menuId获取所有父级和子级id
     * 如果:status==1,将当前menuId包括自己的所有父级和子级数据status状态置为1有效-(无需当前menuId的同级)
     * 如果:status==0,将当前menuId包括自己的所有子级数据status状态置为0无效-(无需当前menuId的同级)
     * @param menuId
     * @param userId
     */
    void setStatus(long menuId, int status, long userId);

    /**
     * 根据userId查询所有功能菜单,过滤权限
     * @param sysType
     * @param userId
     * @return
     */
    List<Object> queryAllByUserId(Integer sysType, long userId, boolean isAdmin);
}
